Python学习笔记 (1)

您所在的位置:网站首页 python 数学模型 Python学习笔记 (1)

Python学习笔记 (1)

2023-07-11 08:30| 来源: 网络整理| 查看: 265

这学期选了数学建模课,因为上学期学了MATLAB,这学期尝试使用Python完成数学建模。

Python的基本语法其实很简单,这里推荐菜鸟教程https://www.runoob.com/python/python-basic-syntax.html和廖雪峰的python教程https://www.liaoxuefeng.com/wiki/1016959663602400

python的强大在于他的各种包,难也难在各种包。要想熟练使用各种包中的各种函数还是有一定难度的,有时候不知道为什么就掉坑里了。

 

昨天用python写了如下几个问题:

1. 建立M-文件: 已知函数 

计算f (-1), f (0.5), f (1.5),并作出该函数的曲线图。

2. 编写利用顺序Guass 消去法求方程组解的M-函数文件,并计算方程组

   的解

3. 编写“商人们安全过河”的Matlab 程序

4. 编写“人口预报问题”的Matlab 程序

上面的matlab都换成python

1. 第一个问题比较基础,写的时候只遇到了一个小问题。

1 import numpy as np 2 import matplotlib.pyplot as plt 3 def myfunc(x): 4 if 0 > x >= -1: 5 return x+1 6 elif 1 > x >= 0: 7 return 1 8 elif 2 > x >= 1: 9 return x**2 10 11 x = np.linspace(-1, 2, 300) 12 y = np.array([myfunc(t) for t in x]) 13 14 y1 = myfunc(-1) 15 y2 = myfunc(0.5) 16 y3 = myfunc(1.5) 17 print("f(-1) = %.2f f(0.5) = %.2f f(1.5) = %.2f" %(y1, y2, y3)) 18 plt.figure() 19 plt.plot(x, y) 20 plt.show()

print函数的格式化输出!我看教程的时候觉得和C语言一样的就直接略过了,结果自己写的时候才发现python的格式化输出是有一些不同的,主要就是后面变量的表示用%和前面的字符串分割而不是C语言中的 , 

另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多:

1 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 2 'Hello, 小明, 成绩提升了 17.1%'

2. 高斯消元法

1 import matplotlib.pyplot as plt 2 import numpy as np 3 from pylab import mpl 4 import math 5 # step0 消元 6 def step0(matrix): 7 row = matrix.shape[0] 8 9 # 保证主元为一 或者主元所在行全为 0 10 for i in range(0, row): 11 if not matrix[i, i]: 12 for j in range(i + 1, row): 13 if matrix[j, i]: 14 matrix[[i, j], :] = matrix[[j,i], :] 15 break 16 17 # 开始消元 18 for i in range(0, row - 1): # 以这些行的主元作为参照依次消除主元以下元素 19 for j in range(i + 1, row): 20 matrix[j, :] = matrix[j, :] - matrix[i, :]/matrix[i, i]*matrix[j,i] 21 22 return matrix 23 24 # step1 回代 25 def step1(matrix): 26 row = matrix.shape[0] 27 # 从倒数第二行开始消元 28 for i in range(row - 2, -1, -1): 29 for j in range(i + 1, row): 30 matrix[i, :] = matrix[i, :] - matrix[j, :]/matrix[j, j]*matrix[i,j] 31 32 return matrix 33 34 # 高斯消元法 35 def Gauss(matrix): 36 37 new = step1(step0(matrix)) 38 row = new.shape[0] 39 col = new.shape[1] 40 x = [0 for k in range (col-1) ] 41 for i in range(0,row): 42 43 x[i] = new[i,col-1]/new[i,i] 44 45 46 return x 47 48 paremeters=np.matrix('1,1,-1,1; 1,2, -2, 0; -2,1,1,1') 49 a = Gauss(paremeters) 50 print(a) View Code

这里借鉴了一下网上的代码。主函数是全部自己写的。遇到的问题是:for循环的范围问题。

这里要强调两点

      1)range(n,m)表示的是n到m-1(包括)的数,默认步长为1,可以在n,m中间加入参数自定义步长。

      2) np.matrix定义的矩阵,行号和列号是从0开始的;python自带的list,索引也是从0开始的。

把握好这两点就可以避免掉坑里

 

3. 商人过河问题

1 #允许状态集合,例num=3 2 #S={(x,y)|x=0,y=0,1,2,3;x=3,y=0,1,2,3;x=y=1,2} x是此岸的商人数,y是此岸的仆人数 3 #允许决策集合,例boat_limit=2 4 #D={(u,v)|1


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3